package org.smog.core.config.swagger;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.net.Inet4Address;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description: Created by IntelliJ IDEA.
 * @project_name: smogTemp
 * @time: 2020-05-13 17:00
 * @email: 17685306043@163.com
 * @author: huangZhongYao
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "swagger")
public class SwaggerProperties {

	/**
	 * 是否启用默认false 生产环境建议关闭
	 */
	boolean enable;
	/**
	 * 文档标题
	 */
	String title;
	/**
	 * controller 包路径
	 */
	String basePackage;
	/**
	 * 接口基础路径
	 */
	String basePath;
	/**
	 * 描述
	 */
	String description;
	/**
	 * 文档文档
	 */
	String version;
	/**
	 * 文档组名称
	 */
	String groupName;
	/**
	 * 主机地址
	 */
	String host;
	/**
	 * 服务端口
	 */
	String port;
	/**
	 * 许可证
	 */
	String license;
	/**
	 * 许可证Url
	 */
	String licenseUrl;
	/**
	 * 服务条款网址
	 */
	String termsOfServiceUrl = "http://www.服务条款网址.org/licenses/LICENSE-2.0";

	/**
	 * 全局参数
	 *
	 * @return
	 */
	Map<String, Parameter> parameter = new HashMap<>();

	/**
	 * 联系人
	 */
	Contact contact;

	public String getHost() {
		try {
			return Inet4Address.getLocalHost().getHostAddress() + ":" + this.port;
		} catch (Exception e) {
			return host;
		}
	}


	@Getter
	@Setter
	public static class Contact {
		/**
		 * 联系人名称
		 */
		String name;
		/**
		 * 联系电话
		 */
		String url;
		/**
		 * 联系邮箱
		 */
		String email;
	}

	/**
	 * swagger文档全局参数
	 */
	@Getter
	@Setter
	public static class Parameter {
		/**
		 * 参数名
		 */
		String name;
		/**
		 * 描述
		 */
		String description;
		/**
		 * 默认值
		 */
		String defaultValue;
		/**
		 * 是否必须
		 */
		Boolean required;
		/**
		 * 参数类型 query,header
		 */
		String paramType;
		/**
		 * 是否隐藏
		 */
		Boolean hidden;
		/**
		 * 排序
		 */
		int order;
	}

}
